import axios from 'axios'

// 封装多个实例

// 第一种将结果回调出去
// export function request(config, success, failure) {
//     // 1. 创建axios的实例
//     const instance = axios.create({
//         baseURL: 'http://123.207.32.32:8000',
//         timeout: 5000,
//     })

//     // 发送真正的网络请求
//     instance(config).then(res => {
//         success(res);
//     }).catch(err => {
//         failure(err);
//     })
// }

// 第二种将结果回调出去
// export function request(config) {
//     const instance = axios.create({
//         baseURL: 'http://123.207.32.32:8000',
//         timeout: 5000,
//     })

//     // 发送真正的网络请求
//     instance(config.baseConfig).then(res => {
//         config.success(res);
//     }).catch(err => {
//         config.failure(err);
//     })
// }


// 第三种:axios联用promise
// export function request(config) {
//     return new Promise((resolve, reject) => {
//         const instance = axios.create({
//             baseURL: 'http://123.207.32.32:8000',
//             timeout: 5000,
//         })

//         instance(config).then(res => {
//             resolve(res);
//         }).catch(err => {
//             reject(err);
//         })
//     })
// }

// 第四种方式
export function request(config) {
    // 1. 创建axios实例
    const instance = axios.create({
        baseURL: 'http://123.207.32.32:8000',
        timeout: 5000,
    })

    // 2. axios的拦截器（分为全局拦截axios.interceptors 和 某实例拦截）
    // 请求拦截
    instance.interceptors.request.use(config => {
        console.log(config);

        // 2-1. 比如config中的一些信息不符合服务器的要求，可以对配置信息做一些修改
        // 2-2. 比如每次发送网络请求时，都希望在界面中显示加载的图标，当响应成功时再到响应拦截器里把这个图标隐藏
        // 2-3. 某些网络请求（比如登录），必须携带一些特殊的信息（token）

        return config;
    }, err => {
        console.log(err);
    });

    // 响应拦截
    instance.interceptors.response.use(res => {
        console.log(res);
        return res.data;
    }, err => {
        console.log(err);
    })

    // 3. 发送真正的网络请求
    return instance(config)
}

export function request2(config) {
    const instance = axios.create({
        baseURL: 'http://152.136.185.210:7878/api/m5',
    })

    return instance(config);
}

// default就表示只导出一个东西
// export default axios